#!/usr/bin/python
# -*- coding: utf-8 -*-
#Python Es la Riata.com
#Fecha: 29/noviembre/2011
#R.A.P.S
# <Guaky una aplicacion desarrollada en python para el mejor y facil uso del servidor de musica xmms2.>
    #Copyright (C) <2011> <R.A.P.S>

    #Este programa es software libre: usted puede redistribuirlo y / o modificar
    #bajo los términos de la Licencia Pública General de GNU según lo publicado por
    #la Free Software Foundation, ya sea la versión 3 de la Licencia, o
    #(A su elección) cualquier versión posterior.

    #Este programa se distribuye con la esperanza de que sea útil,
    #pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de
    #O IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Ver el
    #GNU General Public License para más detalles.

    #Debería haber recibido una copia de la Licencia Pública General de GNU
    #junto con este programa. Si no es así, consulte <http://www.gnu.org/licenses/>.

import sys, os             
pathname = os.path.dirname(sys.argv[0])
ruta=pathname.split("/src")
Exacto=os.path.abspath(ruta[0])
try:
	import gobject
	import gtk
	import re
	import os
	from lista import *
	from NuevaLista import *
	from openlist import *
	import dbus, dbus.service, dbus.glib
	import time

except ImportError:
    sys.exit("pygtk not found.")
try:
	import xmmsclient
	import xmmsclient.glib
except ImportError:
	sys.exit("xmmsclient not found.")

ml = gobject.MainLoop(None, False)
xmms = xmmsclient.XMMS("mp3")

try:
	xmms.connect(os.getenv("XMMS_PATH"))
except IOError, detail:
	print "Now connect to xmms2"
	os.system("xmms2-launcher")
	xmms.connect(os.getenv("XMMS_PATH"))
	
################## Acerca de Guaky-mp3 ##########################################
class Info:
    "Acerca de Guaky-mp3"
    name = "Guaky"
    version = "0.1"
    copyright = "Copyright © 2011 R.A.P.S."
    authors = ["Raul Antonio Pantoja Sanchez\nCon ayuda de mi Sensei (先生) Lesthack"]
    website = ""
    description = "Un cliente grafico para el Reproductor de Musica Xmms2\n\
Guaky es una aplicacion desarrollada en python para el uso del servidor de musica xmms2 de una manera facil y sencilla. "
    license = "\n Copyright © 2011 Raul Antonio Pantoja Sanchez <individuo_raps@hotmail.com>\
\n\n Este programa es software libre:\n Usted puede redistribuirlo y / o modificarlo\n \
bajo los términos de la Licencia Pública General de GNU según lo publicado por la Free Software Foundation,\n \
ya sea la versión 3 de la Licencia, o (A su elección) cualquier versión posterior.\
\n\nEste programa se distribuye con la esperanza de que\n sea útil,pero SIN NINGUNA GARANTÍA, incluso sin la \n garantía  implícita de  O IDONEIDAD PARA UN \n PROPÓSITO PARTICULAR.\n para más detalles Ver el GNU General Public License.\n\n Debería haber recibido una copia de la Licencia Pública General de GNU junto con este programa. Si no es así, consulte <http://www.gnu.org/licenses/>.\n"
	
class replay:
	def __init__(self,xmms):
		self.builder = gtk.Builder()
		UI_FILE=Exacto+"/data/reproductor.ui"
		self.builder.add_from_file(UI_FILE)
		self.window = self.builder.get_object("guaky")
		self.play = self.builder.get_object("play")
		self.pause = self.builder.get_object("pause")
		self.atras = self.builder.get_object("atras")
		self.siguiente = self.builder.get_object("siguiente")
		self.stop= self.builder.get_object("stop")
		self.ifomeshion = self.builder.get_object("imfomeshion")
		self.lista = self.builder.get_object("lista")
		self.progressbar1 = self.builder.get_object("progressbar1")
		self.artista = self.builder.get_object("artista")
		self.album = self.builder.get_object("album")
		self.titulo = self.builder.get_object("titulo")
		self.genero= self.builder.get_object("genero")
		self.image = self.builder.get_object("image")
		self.menubar1 = self.builder.get_object("menubar1")
		self.archivo = self.builder.get_object("archivo")
		self.nuevo = self.builder.get_object("nuevo")
		self.volumen = self.builder.get_object("volumen")
		self.pick=False
		self.xmms = xmms
		self.hok=True
		self.window.set_title("Guaky")

		self.app_listilla = listilla(self,xmms)
		self.intento = libreria(self,xmms)
		self.Openlist =Loading(self,self.xmms)
		self.xmms.broadcast_playback_current_id(self.positionx)
		self.xmms.signal_playback_playtime(self.progreso)
		self.xmms.playback_volume_set('master' , 50)
		self.xmms.playback_volume_get(self.Volumen)
		#self.xmms.playback_current_id(self.positionx)
		self.builder.connect_signals(self)

	def about_info(self, data=None):
			about = gtk.AboutDialog()
			about.set_name(Info.name)
			about.set_version(Info.version)
			about.set_comments(Info.description)
			about.set_copyright(Info.copyright)

			def openHomePage(widget,url,url2): # Para abrir el sitio
				import webbrowser
				webbrowser.open_new(url)

			gtk.about_dialog_set_url_hook(openHomePage,Info.website)
			about.set_website(Info.website)
			about.set_authors(Info.authors)
			about.set_license(Info.license)
			about.set_wrap_license(True) # Adapta el texto a la ventana
			about.run()
			about.destroy()
			
	def Volumen(self,result):
		try:
			Vol= result.value()
			self.volumen.set_value(float(Vol['master'])/100)
		except:
			print "Reproduccion Pausada"
			self.window.set_title("Guaky")
			self.app_listilla.ratero.set_title("Guaky") 
			self.hok=False
			
	def volControl(self,widget,*event):
		try:
			self.xmms.playback_volume_set('master' , widget.get_value()*100)
		except:
			print "Volumen 50%"

	def gooto(self,error,x,y):
		self.app_listilla. error(error,x,y) 
		
	def info(self, widget, *event):
		info='				Formatos soportados:\n\
mp3, m4a, m4p,ogg, flac,asf, wma, wav,ogm, wmv,aac\n\n\
Para mas informacion sobre los formatos soportados\n\
				visite la web official:\n\
		 http://xmms2.org/wiki/Main_Page'
		 
		self.app_listilla. error(info,400,250) 
		
	def soto(self,hoko):
		self.app_listilla.Update(hoko)
		
##Informacion de las Pistas###############################################################################

	def imfomeshion(self, _titulo,_album,_artista,_genero,urlimg):
			self.titulo.set_text( _titulo)
			self.album.set_text(_album)
			self.artista.set_text(_artista)
			self.genero.set_text(_genero)	
			if urlimg!="No disponible":
				pixbuf = gtk.gdk.pixbuf_new_from_file("/home/raul/.config/xmms2/bindata/%s" % urlimg)
				scaled_buf = pixbuf.scale_simple(200,200,gtk.gdk.INTERP_BILINEAR)
				self.image.set_from_pixbuf(scaled_buf )
			else:
				if ruta=='/usr/share/guaky-1.0':
					pixbuf = gtk.gdk.pixbuf_new_from_file("/usr/share/guaky-1.0/data/nocover.png")
				else:
					pixbuf = gtk.gdk.pixbuf_new_from_file(Exacto+"/data/nocover.png")
				scaled_buf = pixbuf.scale_simple(200,180,gtk.gdk.INTERP_BILINEAR)
				self.image.set_from_pixbuf(scaled_buf )

	def listagot(self, widget):
		if self.pick==False:
			self.app_listilla = listilla(self,xmms)
			self.app_listilla.ratero.show()
			
			
			self.pick=True
		width, height = self.window.get_size()
		x, y = self.window.get_position()
		self.window.get_position()
		self.app_listilla.ratero.move(x+width+5,y+5)

	def nueva(self,result):
		playlist = result.value()
		for element in playlist:
			self.xmms.medialib_get_info(element, self.app_listilla.add_track)
			
	def progreso(self, result):
		total = result.value()
		min = total/(60*1000)
		sec = (total - min*1000*60)/1000
		if len(str(min))==1: min = "0%s" % min
		if len(str(sec))==1: sec = "0%s" % sec
		self.progressbar1.set_text("%s:%s  %s" % (min, sec, self.app_listilla.pistaActual))
		progress = 0.0
		if self.app_listilla.duracion > 0:
			progress = (int(total)*100/int(self.app_listilla.duracion))/100.0			
		self.progressbar1.set_fraction(progress)


##########Control - Player ##############################################################

	def on_pause_clicked(self, widget,*event):
		self.xmms.playback_pause()

	def on_siguiente_clicked(self, widget,*event):
		self.xmms.playlist_set_next_rel(1)
		self.xmms.playback_tickle()
		self.xmms.broadcast_playback_current_id(self.positionx)
		
	def on_atras_clicked(self, widget,*event):
		self.xmms.playlist_set_next_rel(-1)
		self.xmms.playback_tickle()
		self.xmms.broadcast_playback_current_id(self.positionx)
		
	def on_play_clicked(self,widget,*event):
		self.xmms.playback_start()
		self.xmms.playback_current_id(self.positionx)
		self.hok=True

	def on_stop_clicked(self,widget,*event):
		self.xmms.playback_stop()
		
	def positionx(self,result):
		actuliti=result
		self.xmms.medialib_get_info(actuliti.value(),self.app_listilla.Kale)
	
	def abierto(self,widget,*event):
		self.app_listilla.seleccione (3,7)

	def nuevoActiv (self,widget,*event):
		self.app_listilla.OpnList(3,7)

	def nuevoActiv (self,widget,*event):
		print "Roto"

	def lipoko (self,widget,*event):
		self.app_listilla.OpnList(3,7)
	
	def adios (self,widget,*event):
		#os.system("xmms2 stop")
		os.system("nyxmms2 stop")
		gtk.main_quit()
		
	def activad (self):
		self.xmms.playlist_current_active(self.app_listilla.geet)

	def Loadlist (self,widget,*event):
		self.Openlist =Loading(self,self.xmms)
		self.Openlist.opventana.show()
		
def main():
	conn = xmmsclient.glib.GLibConnector(xmms)
	print "running application"
	app = replay(xmms)
	app.window.show()
	service = ExampleService(app)
	gtk.main()

class ExampleService(dbus.service.Object):
    def __init__(self, app):
        self.app = app
        bus_name = dbus.service.BusName('org.example.Sample', bus = dbus.SessionBus())
        dbus.service.Object.__init__(self, bus_name, '/org/example/Sample')

    @dbus.service.method(dbus_interface='org.example.Sample')
    def show_window(self):
        self.app.window.present()
	
if __name__ == "__main__":	
	if dbus.SessionBus().request_name("org.example.Sample") != dbus.bus.REQUEST_NAME_REPLY_PRIMARY_OWNER:
		print "application already running"
		method = dbus.SessionBus().get_object("org.example.Sample", "/org/example/Sample").get_dbus_method("show_window")
		method()
	else:
		sys.exit(main())
